package disco;

import java.util.Date;
import sun.reflect.ReflectionFactory.GetReflectionFactoryAction;

public class CFQRequest {
    int pid;                //id del proceso que hizo la petición
    int tipo;               //si es 1 (READ) o 2 (WRITE)
    int bloque;             //bloque en que desea acceder la petición
    long tiempoPeticion;    //tiempo en el que se hizo la petición
    long tiempoAtencion;    //tiempo en el que se cumplió la petición
    int prioridad;
    CFQRequestKey key;

    public CFQRequest(int pid, int tipo, int prioridad, int bloque) {
        this.pid = pid;
        this.tipo = tipo;
        this.bloque = bloque;
        this.prioridad = prioridad;
        Date fecha = new Date();
        this.tiempoPeticion = fecha.getTime() - Main.tiempoComienzoApp;
        this.key = new CFQRequestKey(this.bloque, this.hashCode());
    }
    
    public CFQRequest(int pid, int tipo, int prioridad, int bloque, long tiempoPeticion) {
        this.pid = pid;
        this.tipo = tipo;
        this.bloque = bloque;
        this.prioridad = prioridad;
        Date fecha = new Date();
        this.tiempoPeticion = tiempoPeticion;
        this.key = new CFQRequestKey(this.bloque, this.hashCode());
    }    
    
    public CFQRequest() {
        Date fecha = new Date();
        this.tiempoPeticion = fecha.getTime() - Main.tiempoComienzoApp;
    }
    
    public long getTiempoPeticion() {
        return tiempoPeticion;
    }
    
    public CFQRequestKey getKey() {
        return key;
    }
    
    /*
     * Representación en String del objeto
     */
    @Override
    public String toString() {
        String str = "CfqRequet asociado con proceso de pid " + pid + "\n";
        str += "\tTipo " + tipo + "\n";
        str += "\tBloque " + bloque + "\n";
        str += "\tPrioridad " + prioridad + "\n";      
        str += "\tTiempo de llegada " + tiempoPeticion + "\n";
        return str;
    }
}
